package com.booter.dto;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class JsonResultVo extends HashMap<String, Object> {

    private static final long serialVersionUID = 4361479422758861903L;

    /**
     * 成功状态码
     */
    public static final String SUCCESS = "0";

    /**
     * 失败状态码
     */
    public static final String ERROR = "-1";

    /**
     * 登录失败状态码
     */
    public static final String LOGIN_ERROR = "-2";

    /**
     * 返回错误消息
     *
     * @return 错误消息
     */
    public static JsonResultVo error() {
        return error(ERROR, "操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param message 内容
     * @return 错误消息
     */
    public static JsonResultVo error(String message) {
        return error(ERROR, message);
    }

    /**
     * 返回错误消息
     *
     * @param code    错误码
     * @param message 内容
     * @return 错误消息
     */
    public static JsonResultVo error(String code, String message) {
        JsonResultVo json = new JsonResultVo();
        json.put("status", code);
        json.put("message", message);
        return json;
    }

    /**
     * 返回成功消息
     *
     * @param message 内容
     * @return 成功消息
     */
    public static JsonResultVo success(String message) {
        JsonResultVo json = new JsonResultVo();
        json.put("message", message);
        json.put("status", SUCCESS);
        return json;
    }



    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static JsonResultVo success() {
        return JsonResultVo.success("操作成功");
    }

    public static JsonResultVo success(String status, String message) {
        JsonResultVo json = new JsonResultVo();
        json.put("status", status);
        json.put("message", message);
        return json;
    }

    /**
     * 增加一个值
     *
     * @param key
     * @param value
     * @return
     */
    public JsonResultVo addData(String key, Object value) {
        super.put(key, value);
        return this;
    }

    /**
     * 增加一个key=data 值
     *
     * @param value
     * @return
     */
    public JsonResultVo setData(Object value) {
        super.put("data", value);
        return this;
    }

    /**
     * 增加一个key=data 值
     *
     * @param value
     * @return
     */
    public <T> JsonResultVo setListData(List<T> value) {
        Map<String, Object> returnMap = new HashMap<>();
        returnMap.put("list", value);
        returnMap.put("total", value == null ? 0 : value.size());
        super.put("data", returnMap);
        return this;
    }
}
